package com.example.validate.controller;

import com.example.validate.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import java.util.Arrays;
import java.util.List;

/**
 * Spring Boot 默认使用 Hibernate-validator 校验框架
 * 需要在pom中手动添加依赖
 * 请不要忘了给pojo类添加set() get()
 *
 */
@Controller
@RequestMapping("/user")
public class UserController {

    /**
     * 需要使用springframework 中的@Validated 注解 开启校验
     * 如果传入多个实体对象(pojo)，且这些实体对象都需要进行校验，
     * 则每个pojo对象后面都需要根一个BindingResult参数
     *
     * @param user
     * @param bindingResult 包含校验相关的信息
     * @return
     */
    @RequestMapping("/addUser")
    public String addUser(@ModelAttribute("userAA") @Validated User user, BindingResult bindingResult) {
        System.out.println("user = " + user);
        if (bindingResult.hasErrors()) {
            /**
             * 注意这里返回的集合中范型虽然是ObjectError
             * 但是实际返回的是ObjectError的一个子类FieldError
             */
            List<ObjectError> allErrors = bindingResult.getAllErrors();
            for (ObjectError error : allErrors) {
                FieldError fieldError = (FieldError) error;

                String field = fieldError.getField();
                Object rejectedValue = fieldError.getRejectedValue();
                /**
                 * defaultMessage:校验框架默认的提示信息（含有中文）
                 * */
                String defaultMessage = fieldError.getDefaultMessage();
                String objectName = fieldError.getObjectName();
                Object[] arguments = fieldError.getArguments();
                System.out.println("--------->");
                System.out.println("field = " + field);
                System.out.println("rejectedValue = " + rejectedValue);
                System.out.println("defaultMessage = " + defaultMessage);
                System.out.println("objectName = " + objectName);
                System.out.println("参数:" + Arrays.toString(arguments));
            }
            return "addUserPage";
        }
        return "redirect:/success";
    }


}
